/*{
author=黑店小小二
version=1.0
date=2024/01/29
}*/

/***
0辽东  骑兵守卫  在己方领地作战时，骑兵防御力提高5% √ 已测试
1北平  白马义从  骑兵攻击敌部队时，伤害提高已消耗移动力*0.05% √ 已测试
2蓟    牧马南山  产马量提高3% √ 已测试
3渤海  大戟锐士  戟兵防御力提高3% √ 已测试
4平原  兴粮之道  据点兵的粮草消耗降低3% √ 已测试
5太原  威震戍疆  攻击贼跟异族部队时，吸收造成伤害的5％的士兵 √ 已测试
6邺    河北腹地  势力全据点金收入提高3% √ 已测试
7北海  圣人故里  每旬增加10点技巧 √ 已测试
8广陵  缮甲厉兵  兵装维护费用降低10% √ 已测试
9下邳  陷阵之势  步兵近战主动攻击敌部队时伤害提高3% √ 已测试
10寿春  四战之地  部队战法消耗减少10% √ 已测试
11濮阳  巧夺天工  兵器防御力提高5点 √ 已测试
12陈留  运筹帷幄  计略成功率提高3% √ 已测试
13许昌  煮酒论客  光环带来的效果提高10% √ 已测试
14汝南  密林悍匪  击破非运输队时，获得其10%的金钱 √ 已测试
15洛阳  巍巍神都  忠诚度下降数值减少20% √ 已测试
16宛    四州门户  在敌方领地作战时，步兵部队基础移动力提高10% √ 已测试
17长安  四塞之固  城市受到的耐久伤害减少10% √ 已测试  √ 已调整
18朔方  疾风奔袭  骑兵移动力提高3点. √ 已测试
19安定  骑兵践踏  骑兵攻击敌部队时，使其气力减少2点 √ 已测试
20天水  耀武扬威  攻击敌部队时,武力伤害加成提高20% √ 已测试
21武威  丝绸之路  探索获得的金提高20% √  已测试
22建业  高壁深垒  军事设施受到的耐久伤害减少10% √ 已测试
23吴    泽国操练  水军攻击力提高5% √ 已测试
24建安  越甲雄兵  枪兵攻击力提高3% √ 已测试
25庐江  庐江劲弩  弩兵攻击力提高3% √ 已测试
26柴桑  炎焰火种  火造成的伤害提高3% √ 已测试
27江夏  江流砥柱  水军防御力提高5% √ 已测试
28云中  逐草而居  骑兵部队粮草消耗减少10% √ 已测试
29襄阳  人杰地灵  计略暴击率提高5% √ 已测试
30江陵  柏舟成堆  造船时长减少30%(若自动内政则多产30%) √已测试
31长沙  泛舟沧海  水军移动力提高2点 √ 已测试
32武陵  五溪雄岭  山崖作战时，伤害提高3% √ 已测试
33河东  百炼成兵  兵装产量提高3% √ 已测试
34合浦  丰谷之乡  丰收的人口增长率翻倍 √ 已测试
35巴东  坚壁硬寨  建筑的防御光环效果提高5点 √ 已测试
36汉中  黜衣缩食  步兵部队耗粮降低5% √ 已测试
37梓潼  固若金汤  城市反击伤害提高3% √ 已测试
38巴郡  劲弓连弩  军事建筑的攻击伤害提高5% √ 已测试
39成都  天府之国  县城的人口增长提高10%；金粮收入提高2% √ 已测试
40南海  南粤雄都  势力据点人口增长提高2%  √ 已测试
41云南  南蛮戟舞  戟兵在森林时，攻防提高10%，移动力提高3点 √ 已测试
***/

namespace city_tech
{
  const array<array<string>> tech = {
      /*0辽东*/ {"骑兵卫戍", "本势力骑兵在己方领地作战时防御提高15%"},
      /*1北平*/ {"白马义从", "本势力骑兵攻击时，伤害提高(消耗移动力/2)%"},
      /*2蓟  */ {"牧马南山", "本势力所有据点产马量提高10%"},
      /*3渤海*/ {"大戟锐士", "本势力所有戟兵部队防御力提高8%"},
      /*4平原*/ {"兴粮之道", "本势力所有据点兵的粮草消耗降低5%"},
      /*5太原*/ {"威震戍疆", "部队攻击贼/异族部队，吸收造成伤害的20％"},
      /*6邺  */ {"河北腹地", "本势力全据点金收入提高5%"},
      /*7北海*/ {"圣人故里", "本势力每月增加60点技巧"},
      /*8广陵*/ {"缮甲厉兵", "本势力所有据点兵装维护费用降低35%"},
      /*9下邳*/ {"陷阵之势", "本势力步兵近战主动攻击时伤害提高10%"},
      /*10寿春*/ {"四战之地", "本势力所有部队战法消耗减少10%"},
      /*11濮阳*/ {"巧夺天工", "本势力所有兵器防御力提高10%"},
      /*12陈留*/ {"运筹帷幄", "本势力所有计略成功率提高10%点"},
      /*13许昌*/ {"霸业同辉", "本势力所有光环的全部效果都提高30%"},
      /*14汝南*/ {"密林悍匪", "本势力部队击破非运输队时，获得其30%的金"},
      /*15洛阳*/ {"巍巍神都", "本势力所有武将忠诚度下降数值减少30%"},
      /*16宛  */ {"四州门户", "本势力部队在敌方领地作战时，移动力提高10%"},
      /*17长安*/ {"四塞之固", "本势力所有据点受到的耐久伤害减少20%"},
      /*18朔方*/ {"疾风奔袭", "本势力骑兵移动力提高3点,骑兵攻击提高5%"},
      /*19安定*/ {"骑兵践踏", "本势力骑兵攻击敌部队时，使其气力减少3点"},
      /*20天水*/ {"尚武精神", "本势力部队攻击时,武力伤害加成提高30%"},
      /*21武威*/ {"丝绸之路", "本势力探索获得的金提高30%"},
      /*22建业*/ {"高壁深垒", "本势力所有军事设施受到的耐久伤害减少10%"},
      /*23吴  */ {"泽国操练", "本势力所有水军攻击力提高8%"},
      /*24建安*/ {"越甲雄兵", "本势力所有枪兵攻击力提高5%"},
      /*25庐江*/ {"庐江劲弩", "本势力所有弩兵攻击力提高5%"},
      /*26柴桑*/ {"炎焰火种", "本势力造成的所有火造成的伤害提高10%"},
      /*27江夏*/ {"江流砥柱", "本势力所有水军防御力提高10%"},
      /*28云中*/ {"逐草而居", "本势力所有骑兵部队粮草消耗减少20%"},
      /*29襄阳*/ {"人杰地灵", "本势力所有计略暴击率都提高15%点"},
      /*30江陵*/ {"柏舟成堆", "本势力造船时长减少30%(自动内政多产出30%)"},
      /*31长沙*/ {"洞庭精兵", "本势力所有水军移动力提高3点"},
      /*32武陵*/ {"五溪雄岭", "本势力所有部队于山崖作战时，伤害提高10%"},
      /*33河东*/ {"百炼成兵", "本势力所有据点兵装产量提高10%"},
      /*34合浦*/ {"丰谷之乡", "本势力任一城市丰收时，当月人口大幅增长"},
      /*35巴东*/ {"坚壁硬寨", "本势力所有建筑的防御光环效果提高5点"},
      /*36汉中*/ {"黜衣缩食", "本势力所有步兵部队耗粮降低10%"},
      /*37梓潼*/ {"固若金汤", "本势力所有城市反击伤害提高30%"},
      /*38巴郡*/ {"劲弓连弩", "本势力所有军事建筑的攻击伤害提高10%"},
      /*39成都*/ {"天府之国", "本势力县城人口增长+10%；金粮收入+5%"},
      /*40南海*/ {"收拢难民", "本势力据点人口增长提高5%"},
      /*41云南*/ {"南蛮戟舞", "戟兵部队森林作战时，攻防+20%，移动力+5"}
  };
  class Main
  {
    Main()
    {
      pk::bind(107, pk::trigger107_t(onNewDay));
      pk::bind(175, pk::trigger175_t(onUnitRemove));
      pk::bind(179, pk::trigger179_t(onUnitAfterAttack));
    }

    void onNewDay()
    {
      fun_北海();
    }

    void onUnitRemove(pk::unit@ attacker, pk::unit@ target)
    {
      if (target.type != 部队类型_运输 and is_unit_force_has_city(attacker, 14))
      {
        pk::add_gold(attacker, int(target.gold * 0.3f), true);
      }
    }

    void onUnitAfterAttack(pk::unit@ dst_unit, pk::unit@ attacker, int troops_damage, int critical, int tactics)
    {
      if (dst_unit.get_force_id() >= 非贼势力_末 and is_unit_force_has_city(attacker, 5))
      {
        ch::add_troops(attacker, int(troops_damage * 0.2f), true);
      }
    }

    void fun_北海()
    {
      pk::city@ 北海 = pk::get_city(7);
      int force_id = 北海.get_force_id();
      if (pk::is_valid_force_id(force_id))
      {
        pk::add_tp(pk::get_force(force_id), 20, 北海.get_pos());
      }
    }


  } Main main;

  bool is_force_has_city(pk::force@ force, int city_id)
  {
    if (pk::is_valid_city_id(city_id))
    {
      pk::city@ city = pk::get_city(city_id);
      return city.get_force_id() == force.get_id();
    }
    return false;
  }

  bool is_unit_force_has_city(pk::unit@ unit, int city_id)
  {
    if (pk::is_valid_city_id(city_id) and unit !is null)
    {
      pk::city@ city = pk::get_city(city_id);
      return city.get_force_id() == unit.get_force_id();
    }
    return false;
  }

  bool is_building_force_has_city(pk::building@ building, int city_id)
  {
    if (pk::is_valid_city_id(city_id) and building !is null)
    {
      int force_id = building.get_force_id();
      if (pk::is_valid_force_id(force_id))
      {
        pk::city@ city = pk::get_city(city_id);
        return building.get_force_id() == city.get_force_id();
      }
    }
    return false;
  }

  bool is_atk_unit(pk::unit@ unit)
  {
    if (unit is null or !pk::is_alive(unit)) return false;
    pk::building @area_building = pk::get_building(pk::get_building_id(unit.pos));
    return pk::is_alive(area_building) && unit.get_force_id() != area_building.get_force_id();
  }
}